// * 在声明前导出

// 导出数组
export const arr = [1, 2, 3]

// 导出声明的变量
export const MODULES_BECAME_STANDARD_YEAR = 2015

// 导出类
export class User {
	constructor(name) {
		this.name = name
	}
}

// **********************************************************************************************************************

// * export.js
function sayHi(user) {
	console.log(`Hi ${user}`)
}

function sayBye(user) {
	console.log(`Bye ${user}`)
}

export { sayHi, sayBye }

// *********************************************

// * import.js

// 第一种导入方式：
import { sayHi, sayBye } from './export.js'

// 第二种导入方式(一次性全部导入)：
import * as say from './export.js'
say.sayHi('Ben')
say.sayBye('Ben')

// **********************************************************************************************************************

// * “摇树（tree-shaking）”：从打包好的代码中删除那些未被使用的函数（例如第三方组件库中导出但未使用的组件）。

// **********************************************************************************************************************

// * 导入别名：Import “as” Import “as”
import { sayHi as hi, sayBye as bye } from './export.js'

// * 导出别名：Export “as”
export { sayHi as hi, sayBye as bye }

// * 从技术上讲，我们可以在一个模块中同时有默认的导出和命名的导出。

// **********************************************************************************************************************

// * 重新导出

export { sayHi as hi } from './say.js' // 重新导出 sayHi

export { default as User } from './user.js' // 重新导出 default

// * 要重新导出默认导出，我们必须明确写出 export {default as User}
